package com.whfc.iot.fse.lift.codec;

import com.whfc.iot.fse.lift.entity.LiftMsg0x13;
import com.whfc.iot.util.MsgDataCodecUtil;
import io.netty.buffer.ByteBuf;

import java.io.UnsupportedEncodingException;
import java.util.Date;

/**
 * @author sun_guodong
 * @description
 * @date 2021-05-28
 */
public class LiftMsgDataCodec0x13 implements LiftMsgDataCodec<LiftMsg0x13> {

    @Override
    public void decode(ByteBuf buf, LiftMsg0x13 msg) {
        // 读取硬件时间
        Date time = MsgDataCodecUtil.readDateTime(buf);

        // 本次开始时间
        Date startTime = MsgDataCodecUtil.readDateTime(buf);

        // 本次结束时间
        Date endTime = MsgDataCodecUtil.readDateTime(buf);

        // 驾驶员姓名
        byte[] dirverNameBytes = new byte[32];
        buf.readBytes(dirverNameBytes);
        String dirverName = null;
        try {
            dirverName = new String(dirverNameBytes,"UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        // 驾驶员省份证号
        byte[] idCardNoBytes = new byte[18];
        buf.readBytes(idCardNoBytes);
        String idCardNo = new String(idCardNoBytes);

        // 本次载重
        int weight = buf.readUnsignedShort();

        // 本次载重百分比
        int weightPercent = buf.readUnsignedByte();

        // 本次开始高度
        int startHeight = buf.readUnsignedShort();

        // 本次结束高度
        int endHeight = buf.readUnsignedShort();

        // 本次起升高度
        int height = buf.readUnsignedShort();

        // 本次起升方向
        int direction = buf.readUnsignedByte();

        // 本次平均速度
        int avgSpeed = buf.readUnsignedByte();

        // 本次最大x向倾斜度
        int dipAngleX = buf.readUnsignedShort();

        // 本次最大Y向倾斜度
        int dipAngleY = buf.readUnsignedShort();

        // 本次载人数
        int personNo = buf.readUnsignedByte();

        // 本次起升警报状态
        int warnState = buf.readUnsignedShort();

        // 本次最大风速
        int maxWindSpeed = buf.readUnsignedShort();
        // 开始楼层
        int startFloor = buf.readUnsignedShort();
        // 结束楼层
        int endFloor = buf.readUnsignedShort();

        msg.setTime(time);
        msg.setStartTime(startTime);
        msg.setEndTime(endTime);
        msg.setStartHeight(startHeight);
        msg.setEndHeight(endHeight);
        msg.setHeigth(height);
        msg.setWeight(weight);
        msg.setWeightPercent(weightPercent);
        msg.setAvgSpeed(avgSpeed);
        msg.setDipAngleX(dipAngleX);
        msg.setDipAngleY(dipAngleY);
        msg.setDirverName(dirverName);
        msg.setIdCardNo(idCardNo);
        msg.setDirection(direction);
        msg.setPersonNo(personNo);
        msg.setWarnState(warnState);
        msg.setMaxWindSpeed(maxWindSpeed);
        msg.setStartFloor(startFloor);
        msg.setEndFloor(endFloor);
    }
}
